package student.mindmap.core.model;

import java.util.LinkedList;
import java.util.List;

import static java.util.spi.ToolProvider.findFirst;


public class MindMap {
    private MindMapNode root; // 根节点
    private final List<MindMapNode> allNodes = new LinkedList<>();

    //------------------ 核心操作 -------------------
    // 初始化新导图
    public void createNewMap(String rootText) {
        root = new MindMapNode(rootText);
        allNodes.clear();
        allNodes.add(root);
    }

    // 添加新节点
    public void addNode(MindMapNode node) {allNodes.add(node);}


    // 根据ID查找节点
    public MindMapNode findNodeById(String id) {
        return allNodes.stream()
                .filter(node -> node.getId().equals(id))
                .findFirst()
                .orElse(null);
    }

    // 添加节点到全局列表
    public void registerNode(MindMapNode node) {
        if (!allNodes.contains(node)) {
            allNodes.add(node);
        }
    }

    // 删除节点及其子节点
    public void deleteNode(MindMapNode node) {
        if (node == root) return; // 防止删除根节点

        // 从父节点移除
        MindMapNode parent = node.getParent();
        if (parent != null) {
            parent.getChildren().remove(node);
        }

        // 递归删除子节点
        node.removeAllChildren();
        allNodes.remove(node);
    }

    // 设置根节点
    public void setRoot(MindMapNode root) {
        this.root = root;
        allNodes.add(root); // 确保根节点被注册
    }



    public MindMapNode findNodeByUniqueId(String id) {
        return allNodes.stream()
                .filter(node -> node.getId().equals(id))
                .findFirst()
                .orElse(null);
    }

    //------------------ Getters -------------------
    public MindMapNode getRoot() { return root; }
    public List<MindMapNode> getAllNodes() { return allNodes; }
}